<?php
	require_once '../../PartieClient/clientDomo/Jquery/SPDO.php';
	/*
	 * listeElem : fonction permettant de récupérer les éléments présents dans la base de données qui sont sujet à un évènement dans la semaine analysée.
	 * Renvoie un tableau $liste[Piece][Type_Element][int]=$elt
	 * $elt étant un tableau de clé 'ID_Element', 'ID_ActionElement', 'Debut' et 'Fin'
	 * $jour représente le nombre de jours d'écart entre le jour actuel et le même jour de la semaine affiché par le calendrier.
	 */
	function listeElem($jour)
	{
		$dateDebSemaine = date("Y-m-d", strtotime('-'.($jour-1).'DAY'));
		$dateFinSemaine = date("Y-m-d", strtotime('-'.($jour-7).'DAY'));
		$pdo = SPDO::pdo();
		$liste = array();
		$requetePiece = $pdo->query("SELECT * FROM Piece");
		$requeteChauffage = $pdo->query("SELECT ID_Element FROM Chauffage");
		$requeteStores = $pdo->query("SELECT ID_Element FROM Stores");
		/*Rajouter toutes les listes d'éléments de type différents ici*/
		$listePiece = $requetePiece->fetchAll();
		if(count($listePiece)>0)
		{
			foreach($listePiece as $piece)
			{
				$requeteElt = $pdo->query("SELECT ActionElement.ID_Element as ID_Element, ActionElement.ID_ActionElement as ID_ActionElement, Evenement.Debut as Debut, Evenement.Fin as Fin FROM Evenement, ActionElement, Element WHERE Element.ID_Element = ActionElement.ID_Element AND Evenement.ID_ActionElement = ActionElement.ID_ActionElement AND ".$dateDebSemaine."< Evenement.Fin AND ".$dateFinSemaine."> Evenement.Debut AND Element.ID_Piece=".$piece['ID_Piece']);
				$listeElt = $requeteElt->fetchAll();
				if(count($listeElt)>0)
				{
					$liste[$piece['Nom_Piece']]['Stores']=null;
					$liste[$piece['Nom_Piece']]['Chauffage']=null;
					/*Mettre les autres types d'élément a null ici*/
					foreach($listeElt as $elt)
					{
						if(in_array($listeChauffage,$elt['ID_Element']))
						{
							$liste[$piece['Nom_Piece']]['Chauffage'][]=$elt;
						}
						else if(in_array($listeStores, $elt['ID_Element']))
						{
							$liste[$piece['Nom_Piece']]['Stores'][]=$elt;
						}
						/*Mettre les vérifications pour les autres types d'éléments ici*/
					}
				}
			}
		}
		return $liste;
	}
	/*
	 * enregistrerEvenement : Fonction permettant d'enregistrer un évènement dans la base de données.
	 * Renvoie 0 si l'insertion est réussie, 1 sinon.
	 * $debut : TIMESTAMP correspondant au debut de l'évènement.
	 * $fin : TIMESTAMP correspondant à la fin de l'évènement.
	 * $elt : tableau ayant pour clés : 'ID_Element', 'TypeElement', 'Debut', 'Fin', [si TypeElement = 'Chauffage' : 'Etat' et 'Temperature', si TypeElement = 'Store' : 'Position']
	 */
	function enregistrerEvenement($debut, $fin, $elt)
	{
		$pdo = SPDO::pdo();
		try 
		{
			$pdo->beginTransaction();			
			$execActionElement = $pdo->exec("INSERT INTO ActionElement VALUES('0',".$elt['ID_Element'].")");
			$idElt = $pdo->lastInsertId();
			$execEvenement = $pdo->exec("INSERT INTO Evenement VALUES('0',".$idElt.",".$debut.",".$fin.")");
			if($elt['TypeElement']=='Chauffage')
			{
				$execChauff = $pdo->exec("INSERT INTO ActionChauffage VALUES('0',".$elt['Etat'].", ".$elt['Temperature'].", ".$idElt.")");
			}
			else if($elt['TypeElement']=='Store')
			{
				$execStore = $pdo->exec("INSERT INTO ActionStore VALUES('0',".$elt['Position'].",".$idElt.")");
			}
			/*Mettre les autres types ici*/
			else
			{
				throw new Exception();
			}
			$pdo->commit();
			return 0;
		}
		catch(Exception $e)
		{
			$pdo->rollBack();
			return 1;
		}
	}
	/*
	 * recuperationInfo : fonction permettant de récupérer les informations relatives à l'élément programmé.
	 * Renvoie un tableau des informations à apporter changeant de forme selon le type attendu. Renvoie null en cas d'erreur.
	 * $elt : tableau décrivant l'élément que l'on analyse. Doit au minimum contenir une clé 'ID_ActionElement'
	 * $type : chaine de caractères décrivant le type d'élément.
	 */
	function recuperationInfo($elt, $type)
	{
		$pdo = SPDO::pdo();
		if($type=='Chauffage')
		{
				$requeteChauff = $pdo->query("SELECT Etat, Temperature FROM ActionChauffage WHERE ID_ActionElement =".$elt['ID_ActionElement']);
				$actionChauff = $requeteChauff->fetch();
				if(count($actionChauff)>0)
				{
					return $actionChauff;
				}
				else
				{
					return null;
				}
		}
		else if($type=='Store')
		{
				$requeteStore = $pdo->query("SELECT Position FROM ActionStore WHERE ID_ActionElement =".$elt['ID_ActionElement']);
				$actionStore = $requeteStore->fetch();
				if(count($actionStore)>0)
				{
					return $actionStore;
				}
				else
				{
					return null;
				}
		}
		/*Ajouter les autres types d'éléments ici*/
		else
		{
			return null;
		}
	}
?>
